package io.bsonntag.neddy.http; import io.netty.buffer.ByteBuf; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.QueryStringDecoder; import io.netty.util.CharsetUtil; import java.net.URI; import java.util.Map.Entry; import java.util.function.Function; import static java.util.stream.Collectors.toList; /** * RequestConverter * * @author Benjamim Sonntag <benjamimsonntag@gmail.com> * @version 22/mai/2015 */ class RequestConverter { private static final Function<Entry<String,String>, HttpHeaderField> toHeaderField = header -> new HttpHeaderField(header.getKey(), header.getValue()); static HttpRequest convert(io.netty.handler.codec.http.HttpRequest request) { return new RequestConverter(request).convert(); } private final io.netty.handler.codec.http.HttpRequest nettyRequest; private RequestConverter(io.netty.handler.codec.http.HttpRequest nettyRequest) { this.nettyRequest = nettyRequest; } private HttpRequest convert() { return new HttpRequest( convertMethod(), convertUri(), convertHeader(), convertParameters(), convertContent() ); } private HttpMethod convertMethod() { return HttpMethod.valueOf(nettyRequest.getMethod().name()); } private URI convertUri() { return URI.create(nettyRequest.getUri()); } private HttpHeader convertHeader() { return new HttpHeader( nettyRequest.headers().entries().stream() .map(toHeaderField) .collect(toList())); } private HttpParams convertParameters() { QueryStringDecoder decoder = new QueryStringDecoder(nettyRequest.getUri()); return new HttpParams(decoder.parameters()); } private String convertContent() { if(nettyRequest instanceof FullHttpRequest) { ByteBuf content = ((FullHttpRequest)nettyRequest).content(); return content.toString(CharsetUtil.UTF_8); } else { return ""; } } }